Registered S3 method overwritten by 'data.table':
method from
print.data.table
data.table 1.12.8 using 8 threads (see ?getDTthreads). Latest news: r-datatable.com
Evolution in Switzerland and Western Europe
The figures do not represent the same thing in each country, depending on the extent of the screening tests carried out. Regardless of this problem, the weekly and daily trend curves allow you to get an idea of the foreseeable evolution for the next days (assuming that the screening strategy does not change over time). Respectively, it provides an indication of a possible inflection of the progression of the epidemic in the near future.
What Happened in Hubei Province (China)





Comparison of Number of Confirmed Cases in Western Europe


Comparison of Number of Deaths in Western Europe


Comparison of Number of Recovered Cases in Western Europe
WARNING: The figures seem to be wrong on March 23, 2020.


Comparison of Number of Active Cases in Western Europe
WARNING: The figures seem to be wrong on March 23, 2020.


LS0tCnRpdGxlOiAiQ09WSUQtMTkgaW4gU3dpdHplcmxhbmQgYW5kIFdlc3Rlcm4gRXVyb3BlIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jOiB5ZXMKICBodG1sX25vdGVib29rOiAKICAgIGZpZ19oZWlnaHQ6IDUKICAgIGZpZ193aWR0aDogNwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvYzogeWVzCiAgd29yZF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDogZGVmYXVsdApkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWSAtICVIOiVNJylgIgphdXRob3I6ICJQaGlsaXBwZSBEb2NvdXJ0IgotLS0KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGRhdGEudGFibGUpCgpnZXRfdGltZXNlcmllc19hc192ZWN0b3IgPC0gZnVuY3Rpb24oZGYpIHsKICB0bXAgPC0gc3Vic2V0KGRmLCBzZWxlY3QgPSAtYygxOjQpKQogIHRtcCA8LSBzYXBwbHkoYXMudmVjdG9yKHRyYW5zcG9zZSh0bXApKSwgYXMuaW50ZWdlcikKICByZXR1cm4odG1wKQp9CgpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5IDwtIGZ1bmN0aW9uKGNvdW50cnkuY29uZmlybWVkLCBjb3VudHJ5LmRlYXRocywgY291bnRyeS5yZWNvdmVyZWQsIGNvdW50cnkubmFtZSwgcHVibGljLnNwYWNlcy5jbG9zZWQuYXQ9TkEsIGNvbmZpbmVtZW50LmF0PU5BLCB0cmVuZC5hbmdsZT0yMCkgewogICAgZGF5LmNvdW50IDwtIG5yb3coY291bnRyeS5jb25maXJtZWQpCiAgeWxpbSA8LSBjKDAsIDEuMyAqIG1heChjb3VudHJ5LmNvbmZpcm1lZCwgbmEucm0gPSBUUlVFKSkKICBkYXkuc3RhcnQgPC0gbWluKGMoMzUsIHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0LCBjb25maW5lbWVudC5hdCksIG5hLnJtID0gVFJVRSkKICBwbG90KGNvdW50cnkuY29uZmlybWVkLCBtYWluPSBwYXN0ZSgiQ2FzZXMgaW4iLCBjb3VudHJ5Lm5hbWUpLCB0eXBlID0gIm8iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIiwgY29sID0gInJlZCIsIHhsaW0gPSAgYyhkYXkuc3RhcnQsIGRheS5jb3VudCArIDcpLCB5bGltID0geWxpbSkKICBsaW5lcyhzZXEoMSwgbGVuZ3RoKGNvdW50cnkuZGVhdGhzKSksIGNvdW50cnkuZGVhdGhzLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBsdHkgPSAxLCBsdyA9IDEpCiAgbGluZXMoc2VxKDEsIGxlbmd0aChjb3VudHJ5LnJlY292ZXJlZCkpLCBjb3VudHJ5LnJlY292ZXJlZCwgdHlwZSA9ICJsIiwgY29sID0gImdyZWVuIiwgbHR5ID0gMSwgbHcgPSAxKQogIGdyaWQoKQogIGF4aXMoc2lkZSA9IDEsIGF0ID0gc2VxKGRheS5zdGFydCAlLyUgNSAqIDUsIGRheS5jb3VudCwgNSkpCiAgCiAgIyBUcmVuZCBiYXNlZCBvbiBsYXN0IHR3byBvYnNlcnZhdGlvbnMgKGxhc3QgZGF5KS4KICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gMikKICBkeSA8LWxhc3QuY29uZmlybWVkWzJdIC0gbGFzdC5jb25maXJtZWRbMV0KICBzbG9wZSA8LSBkeQogIHUgPC0gYygxLCBkeSkKICBhIDwtIGxhc3QuY29uZmlybWVkWzFdIC0gKGRheS5jb3VudCAtIDEpICogc2xvcGUKICBhYmxpbmUoYSA9IGEsIGIgPSBzbG9wZSwgY29sID0gInZpb2xldCIsIGx3ID0gMS41LCBsdHkgPSA0KQogIGxhc3QucHJvZ3Jlc3Npb24ucGN0IDwtIHJvdW5kKCgxMDAgKiBkeSkgLyBsYXN0LmNvbmZpcm1lZFsxXSkKICB0ZXh0KHggPSBkYXkuY291bnQgLSA0LCB5ID0gMC41ICogeWxpbVsyXSwgcGFzdGUoZHksICJjYXNlcy9kYXlcbkV4dHJhcG9sYXRpb246IiwgZHkgKiA3LCAiY2FzZS93ZWVrXG4iLCBsYXN0LnByb2dyZXNzaW9uLnBjdCwgIiUgcHJvZ3Jlc3MgbGFzdCBkYXkiKSwgc3J0ID0gdHJlbmQuYW5nbGUsIGNvbCA9ICJ2aW9sZXQiKQogIAogICMgVHJlbmQgYmFzZWQgb24gbGFzdCA4IG9ic2VydmF0aW9ucyAoNyBpbnRlcnZhbHMsIG9uZSB3ZWVrKQogIGxhc3QuY29uZmlybWVkIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG4gPSA4KQogIGR5IDwtbGFzdC5jb25maXJtZWRbOF0gLSBsYXN0LmNvbmZpcm1lZFsxXQogIHNsb3BlIDwtIGR5IC8gNwogIHUgPC0gYyg3LCBkeSkKICBhIDwtIGxhc3QuY29uZmlybWVkWzFdIC0gKGRheS5jb3VudCAtIDcpICogc2xvcGUKICBhYmxpbmUoYSA9IGEsIGIgPSBzbG9wZSwgY29sID0gImJsYWNrIiwgbHcgPSAxLjUsIGx0eSA9IDQpCiAgbGFzdC5wcm9ncmVzc2lvbi5wY3QgPC0gcm91bmQoKDEwMCAqIGR5KSAvIGxhc3QuY29uZmlybWVkWzFdKQogIHRleHQoeCA9IGRheS5jb3VudCAtIDgsIHkgPSAoMC44OCAtICh0cmVuZC5hbmdsZS8zMDAwKSkgKiB5bGltWzJdLCBwYXN0ZShkeSwgImNhc2VzL3dlZWtcbkF2ZzoiLCBkeSAlLyUgNywgImNhc2UvZGF5XG4iLCBsYXN0LnByb2dyZXNzaW9uLnBjdCwgIiUgcHJvZ3Jlc3MgbGFzdCB3ZWVrIiksIHNydCA9IHRyZW5kLmFuZ2xlLCBjb2wgPSAiYmxhY2siKQogIAogICMgU2hvdyBzcGVjaWFsIG1lYXN1cmVzIGFnYWluc3QgcHJvcGFnYXRpb24uCiAgeXBvcyA9IG1heChjb3VudHJ5LmNvbmZpcm1lZCwgbmEucm0gPSBUUlVFKSAlLyUgMwogIGlmICghaXMubmEocHVibGljLnNwYWNlcy5jbG9zZWQuYXQpKSB7CiAgICBhYmxpbmUodiA9IHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0LCBjb2wgPSAiYmx1ZSIsIGx3ID0gMSwgbHR5ID0gNSkKICAgIHRleHQoeCA9IHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0IC0gMSwgeSA9IHlwb3MsICJBbGwgcHVibGljIHNwYWNlcyBhcmUgY2xvc2VkIiwgY29sID0gImJsdWUiLCBzcnQgPSA5MCkKICB9CiAgaWYgKCFpcy5uYShjb25maW5lbWVudC5hdCkpIHsKICAgIGFibGluZSh2ID0gY29uZmluZW1lbnQuYXQsIGNvbCA9ICJyZWQiLCBsdyA9IDEsIGx0eSA9IDUpCiAgICB0ZXh0KHggPSBjb25maW5lbWVudC5hdCAtIDEsIHkgPSB5cG9zLCAiUG9wdWxhdGlvbiBpcyBjb25maW5lZCIsIGNvbCA9ICJyZWQiLCBzcnQgPSA5MCkKICB9CiAgCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygiQ29uZmlybWVkIiwgIkRlYXRocyIsICJSZWNvdmVyZWQiLCAiQ29uZmlybWVkIHRyZW5kIGJhc2VkIG9uIGxhc3QgZGF5IiwgIkNvbmZpcm1lZCB0cmVuZCBiYXNlZCBvbiBsYXN0IHdlZWsiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgImdyZWVuIiwgInZpb2xldCIsICJibGFjayIpLCBsdHkgPSBjKHJlcCgxLCAzKSwgMiwgMyksIGx3ID0gYyhyZXAoMSwgMyksIDEuNSwgMS41KSkKICAKICBkaWZmcyA8LSBkaWZmKGNvdW50cnkuY29uZmlybWVkKQogIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAiYmx1ZSIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBDb25maXJtZWQgQ2FzZXMgcGVyIERheSIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgCiAgZGlmZnMgPC0gZGlmZihjb3VudHJ5LmRlYXRocykKICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImJsYWNrIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IERlYXRocyBwZXIgRGF5IiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBEZWF0aHMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgCiAgaWYgKCFpcy5uYShjb3VudHJ5LnJlY292ZXJlZCkpIHsKICAgIGRpZmZzIDwtIGRpZmYoY291bnRyeS5yZWNvdmVyZWQpCiAgICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImdyZWVuIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksICBtYWluID0gcGFzdGUoIk5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSBpbiIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkiLCBsd2QgPSA1KQogICAgZ3JpZCgpCiAgICAKICAgIGRpZmZzIDwtIGRpZmYoY291bnRyeS5jb25maXJtZWQgLSAoY291bnRyeS5kZWF0aHMgKyBjb3VudHJ5LnJlY292ZXJlZCkpCiAgICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gInJlZCIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkiLCBsd2Q9NSkKICAgIGdyaWQoKQogIH0KfQoKY292aWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfY29uZmlybWVkX2dsb2JhbC5jc3YiKQpjb3ZpZC5kZWF0aHMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfZGVhdGhzX2dsb2JhbC5jc3YiKQpjb3ZpZC5yZWNvdmVyZWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfcmVjb3ZlcmVkX2dsb2JhbC5jc3YiKQoKY291bnRyeS5uYW1lcyA8LSBjKCJTd2l0emVybGFuZCIsICJJdGFseSIsICJGcmFuY2UiLCAiR2VybWFueSIsICJBdXN0cmlhIiAsICJTcGFpbiIsICJHcmVhdCBCcml0YWluIiwgIkRlbm1hcmsiLCAiTm9yd2F5IiwgIlN3ZWRlbiIsICJJY2VsYW5kIikKY291bnRyeS5jb3VudCA8LSBsZW5ndGgoY291bnRyeS5uYW1lcykKY29sIDwtIHJhaW5ib3coY291bnRyeS5jb3VudCkKbHR5IDwtIHNlcSgxLCBjb3VudHJ5LmNvdW50KQpwY2ggPC0gc2VxKDEwLCAxMCArIGNvdW50cnkuY291bnQpCgpzd2l0emVybGFuZC5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlN3aXR6ZXJsYW5kIikpCnN3aXR6ZXJsYW5kLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlN3aXR6ZXJsYW5kIikpCnN3aXR6ZXJsYW5kLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlN3aXR6ZXJsYW5kIikpCgppdGFseS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCml0YWx5LmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCml0YWx5LnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCgpmcmFuY2UuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJGcmFuY2UiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpmcmFuY2UuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRnJhbmNlIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKZnJhbmNlLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkZyYW5jZSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCgpnZXJtYW55LmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiR2VybWFueSIpKQpnZXJtYW55LmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkdlcm1hbnkiKSkKZ2VybWFueS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJHZXJtYW55IikpCgphdXN0cmlhLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQXVzdHJpYSIpKQphdXN0cmlhLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkF1c3RyaWEiKSkKYXVzdHJpYS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJBdXN0cmlhIikpCgpzcGFpbi5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCnNwYWluLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCnNwYWluLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCgp1ay5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlVuaXRlZCBLaW5nZG9tIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKdWsuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiVW5pdGVkIEtpbmdkb20iICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQp1ay5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJVbml0ZWQgS2luZ2RvbSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCgpkZW5tYXJrLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmRlbm1hcmsuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmRlbm1hcmsucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCgpub3J3YXkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCm5vcndheS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCm5vcndheS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCgpzd2VkZW4uY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJTd2VkZW4iKSkKc3dlZGVuLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlN3ZWRlbiIpKQpzd2VkZW4ucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dlZGVuIikpCgppY2VsYW5kLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQppY2VsYW5kLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKaWNlbGFuZC5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCgpjb3VudHJpZXMuY29uZmlybWVkIDwtIGxpc3Qoc3dpdHplcmxhbmQuY29uZmlybWVkLCBpdGFseS5jb25maXJtZWQsIGZyYW5jZS5jb25maXJtZWQsIGdlcm1hbnkuY29uZmlybWVkLCBhdXN0cmlhLmNvbmZpcm1lZCwgc3BhaW4uY29uZmlybWVkLCB1ay5jb25maXJtZWQsIGRlbm1hcmsuY29uZmlybWVkLCBub3J3YXkuY29uZmlybWVkLCBzd2VkZW4uY29uZmlybWVkLCBpY2VsYW5kLmNvbmZpcm1lZCkKY291bnRyaWVzLmRlYXRocyA8LSBsaXN0KHN3aXR6ZXJsYW5kLmRlYXRocywgaXRhbHkuZGVhdGhzLCBmcmFuY2UuZGVhdGhzLCBnZXJtYW55LmRlYXRocywgYXVzdHJpYS5kZWF0aHMsIHNwYWluLmRlYXRocywgdWsuZGVhdGhzLCBkZW5tYXJrLmRlYXRocywgbm9yd2F5LmRlYXRocywgc3dlZGVuLmRlYXRocywgaWNlbGFuZC5kZWF0aHMpCmNvdW50cmllcy5yZWNvdmVyZWQgPC0gbGlzdChzd2l0emVybGFuZC5yZWNvdmVyZWQsIGl0YWx5LnJlY292ZXJlZCwgZnJhbmNlLnJlY292ZXJlZCwgZ2VybWFueS5yZWNvdmVyZWQsIGF1c3RyaWEucmVjb3ZlcmVkLCBzcGFpbi5yZWNvdmVyZWQsIHVrLnJlY292ZXJlZCwgZGVubWFyay5yZWNvdmVyZWQsIG5vcndheS5yZWNvdmVyZWQsIHN3ZWRlbi5jb25maXJtZWQsIGljZWxhbmQucmVjb3ZlcmVkKQoKCmRheS5jb3VudCA8LSBOUk9XKHN3aXR6ZXJsYW5kLmNvbmZpcm1lZCkKYGBgCgojIEV2b2x1dGlvbiBpbiBTd2l0emVybGFuZCBhbmQgV2VzdGVybiBFdXJvcGUKClRoZSBmaWd1cmVzIGRvIG5vdCByZXByZXNlbnQgdGhlIHNhbWUgdGhpbmcgaW4gZWFjaCBjb3VudHJ5LCBkZXBlbmRpbmcgb24gdGhlIGV4dGVudCBvZiB0aGUgc2NyZWVuaW5nIHRlc3RzIGNhcnJpZWQgb3V0LiBSZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbSwgdGhlIHdlZWtseSBhbmQgZGFpbHkgdHJlbmQgY3VydmVzIGFsbG93IHlvdSB0byBnZXQgYW4gaWRlYSBvZiB0aGUgZm9yZXNlZWFibGUgZXZvbHV0aW9uIGZvciB0aGUgbmV4dCBkYXlzIChhc3N1bWluZyB0aGF0IHRoZSBzY3JlZW5pbmcgc3RyYXRlZ3kgZG9lcyBub3QgY2hhbmdlIG92ZXIgdGltZSkuIFJlc3BlY3RpdmVseSwgaXQgcHJvdmlkZXMgYW4gaW5kaWNhdGlvbiBvZiBhIHBvc3NpYmxlIGluZmxlY3Rpb24gb2YgdGhlIHByb2dyZXNzaW9uIG9mIHRoZSBlcGlkZW1pYyBpbiB0aGUgbmVhciBmdXR1cmUuCgojIyBTd2l0emVybGFuZApgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShzd2l0emVybGFuZC5jb25maXJtZWQsIHN3aXR6ZXJsYW5kLmRlYXRocywgc3dpdHplcmxhbmQucmVjb3ZlcmVkLCAiU3dpdHplcmxhbmQiLCA1NSwgTkEsIHRyZW5kLmFuZ2xlID0gOCkKYGBgCgojIyBJdGFseQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShpdGFseS5jb25maXJtZWQsIGl0YWx5LmRlYXRocywgaXRhbHkucmVjb3ZlcmVkLCAiSXRhbHkiLCBOQSwgNDkpCmBgYAoKIyMgRnJhbmNlCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGZyYW5jZS5jb25maXJtZWQsIGdlcm1hbnkuZGVhdGhzLCBmcmFuY2UucmVjb3ZlcmVkLCAiRnJhbmNlIiwgNTMsIDU2LCB0cmVuZC5hbmdsZSA9IDEwKQpgYGAKCiMjIEdlcm1hbnkKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoZ2VybWFueS5jb25maXJtZWQsIHN3aXR6ZXJsYW5kLmRlYXRocywgZ2VybWFueS5yZWNvdmVyZWQsICJHZXJtYW55IiwgNDgsIE5BLCB0cmVuZC5hbmdsZSA9IDE1KQpgYGAKCiMjIEF1c3RyaWEKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoYXVzdHJpYS5jb25maXJtZWQsIGF1c3RyaWEuZGVhdGhzLCBhdXN0cmlhLnJlY292ZXJlZCwgIkF1c3RyaWEiLCA1MiwgTkEsIHRyZW5kLmFuZ2xlID0gOCkKYGBgCgojIyBTcGFpbgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShzcGFpbi5jb25maXJtZWQsIHNwYWluLmRlYXRocywgc3BhaW4ucmVjb3ZlcmVkLCAiU3BhaW4iLCBOQSwgNTMsIHRyZW5kLmFuZ2xlID0gMTUpCmBgYAoKIyMgR3JlYXQgQnJpdGFpbgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeSh1ay5jb25maXJtZWQsIHVrLmRlYXRocywgdWsucmVjb3ZlcmVkLCAiR3JlYXQgQnJpdGFpbiIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSA0MCkKYGBgCgojIyBEZW5tYXJrCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGRlbm1hcmsuY29uZmlybWVkLCBkZW5tYXJrLmRlYXRocywgZGVubWFyay5yZWNvdmVyZWQsICJEZW5tYXJrIiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDIwKQpgYGAKCiMjIE5vcndheQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShub3J3YXkuY29uZmlybWVkLCBub3J3YXkuZGVhdGhzLCBub3J3YXkucmVjb3ZlcmVkLCAiTm9yd2F5IiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDApCmBgYAoKIyMgU3dlZGVuCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KHN3ZWRlbi5jb25maXJtZWQsIHN3ZWRlbi5kZWF0aHMsIHN3ZWRlbi5yZWNvdmVyZWQsICJTd2VkZW4iLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gMzApCmBgYAoKIyMgSWNlbGFuZApgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShpY2VsYW5kLmNvbmZpcm1lZCwgaWNlbGFuZC5kZWF0aHMsIGljZWxhbmQucmVjb3ZlcmVkLCAiSWNlbGFuZCIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSAzKQpgYGAKCiMgV2hhdCBIYXBwZW5lZCBpbiBIdWJlaSBQcm92aW5jZSAoQ2hpbmEpCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KaHViZWkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJDaGluYSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiSHViZWkiKSkKaHViZWkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQ2hpbmEiICYgUHJvdmluY2UuU3RhdGUgPT0gIkh1YmVpIikpCmh1YmVpLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkNoaW5hIiAmIFByb3ZpbmNlLlN0YXRlID09ICJIdWJlaSIpKQoKcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShodWJlaS5jb25maXJtZWQsIGh1YmVpLmRlYXRocywgaHViZWkucmVjb3ZlcmVkLCAiSHViZWkgUHJvdmluY2UsIENoaW5hIiwgTkEsIDIsIHRyZW5kLmFuZ2xlID0gMCkKYGBgCgojIFdoYXQgSXMgSGFwcGVuaW5nIGluIFVTQQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmdldF9zdW1fb2ZfdGltZXNlcmllc19hc192ZWN0b3JfZm9yX3VzYSA8LSBmdW5jdGlvbihkZiwgZXhsdWRlKSB7CiAgdG1wIDwtIGNvbFN1bXMoc3Vic2V0KGRmLCBzZWxlY3QgPSAtZXhsdWRlKSkKICB0bXAgPC0gc2FwcGx5KGFzLnZlY3Rvcih0cmFuc3Bvc2UoYXMubGlzdCh0bXApKSksIGFzLmludGVnZXIpCiAgcmV0dXJuKHRtcCkKfQoKY292aWQudXMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfY29uZmlybWVkX1VTLmNzdiIpCmNvdmlkLnVzLmRlYXRocyA8LSByZWFkLmNzdigiY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMvdGltZV9zZXJpZXNfY292aWQxOV9kZWF0aHNfVVMuY3N2IikKCnVzYS5jb25maXJtZWQgPC0gc3Vic2V0KGNvdmlkLnVzLCBpc28zID09ICJVU0EiKQp1c2EuZGVhdGhzIDwtIHN1YnNldChjb3ZpZC51cy5kZWF0aHMsIGlzbzMgPT0gIlVTQSIpCgp1c2EuY29uZmlybWVkIDwtIGdldF9zdW1fb2ZfdGltZXNlcmllc19hc192ZWN0b3JfZm9yX3VzYSh1c2EuY29uZmlybWVkLCBjKDE6MTEpKQp1c2EuZGVhdGhzIDwtIGdldF9zdW1fb2ZfdGltZXNlcmllc19hc192ZWN0b3JfZm9yX3VzYSh1c2EuZGVhdGhzLCBjKDE6MTIpKQoKcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeSh1c2EuY29uZmlybWVkLCB1c2EuZGVhdGhzLCBOQSwgIlVTQSIsIE5BLCBOQSwgdHJlbmQuYW5nbGU9MzUpCmBgYAoKIyBDb21wYXJpc29uIG9mIE51bWJlciBvZiBDb25maXJtZWQgQ2FzZXMgaW4gV2VzdGVybiBFdXJvcGUKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp4cmFuZ2UgPC0gYygzNSwgZGF5LmNvdW50KQptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKSwgbmEucm0gPSBUUlVFKQp9CnlyYW5nZSA8LSBjKDAsIG1heC55KQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiQ29uZmlybWVkIENhc2VzIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBDYXNlcyIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMSwgZGF5LmNvdW50KSwgY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dLCB0eXBlID0gImIiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IGx0eVtpXSwgcGNoID0gcGNoW2ldLCBsdyA9IDEpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gbHR5LCBwY2ggPSBwY2gsIHRpdGxlID0gIkNvdW50cnkiKQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYodGFpbChjb3VudHJpZXMuY29uZmlybWVkW1tpXV0pKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkgKiAyKQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IENvbmZpcm1lZCBDYXNlcyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZihjb3VudHJpZXMuY29uZmlybWVkW1tpXV0pLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gNCkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgRGVhdGhzIGluIFdlc3Rlcm4gRXVyb3BlCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KeHJhbmdlIDwtIGMoNDAsIGRheS5jb3VudCkKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5kZWF0aHNbW2ldXSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkRlYXRocyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgRGVhdGhzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgxLCBkYXkuY291bnQpLCBjb3VudHJpZXMuZGVhdGhzW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih0YWlsKGNvdW50cmllcy5kZWF0aHNbW2ldXSkpKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KQp5cmFuZ2UgPC0gYygwLCBtYXgueSAqIDIpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgRGVhdGhzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBEZWF0aHMgcGVyIERheSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZihjb3VudHJpZXMuZGVhdGhzW1tpXV0pLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gNCkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgUmVjb3ZlcmVkIENhc2VzIGluIFdlc3Rlcm4gRXVyb3BlCgpXQVJOSU5HOiBUaGUgZmlndXJlcyBzZWVtIHRvIGJlIHdyb25nIG9uIE1hcmNoIDIzLCAyMDIwLgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoNTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJSZWNvdmVyZWQgQ2FzZXMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGQgPC0gbnJvdyhjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pCiAgbGluZXMoc2VxKDEsIGQpLCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih0YWlsKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSkpKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KQp5cmFuZ2UgPC0gYygwLCBtYXgueSAqIDIpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZihjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gNCkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgQWN0aXZlIENhc2VzIGluIFdlc3Rlcm4gRXVyb3BlCgpXQVJOSU5HOiBUaGUgZmlndXJlcyBzZWVtIHRvIGJlIHdyb25nIG9uIE1hcmNoIDIzLCAyMDIwLgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgeSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkFjdGl2ZSBDYXNlcyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgQ2FzZXMiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgeSA8LSBjb3VudHJpZXMuY29uZmlybWVkW1tpXV0gLSAoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dICsgY291bnRyaWVzLmRlYXRoc1tbaV1dKQogIGxpbmVzKHNlcSgxLCBkKSwgeSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSBsdHlbaV0sIHBjaCA9IHBjaFtpXSwgbHcgPSAxKQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IGx0eSwgcGNoID0gcGNoLCB0aXRsZSA9ICJDb3VudHJ5IikKCm1pbi55IDwtIDAKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgeSA8LSBjb3VudHJpZXMuY29uZmlybWVkW1tpXV0gLSAoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dICsgY291bnRyaWVzLmRlYXRoc1tbaV1dKQogIHkgPC0gdGFpbCh5LCAxMCkKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKICBtaW4ueSA8LSBtaW4oYyhtaW4ueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMobWluLnksIG1heC55ICogMikKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIk5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IEFjdGl2ZSBDYXNlcyBwZXIgRGF5IikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZih5KSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDQpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKYGBgCgojIEFib3V0CgpBbGwgdGhlIGdyYXBocyBhYm92ZSBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgYnkgSm9obnMgSG9wa2lucyBDU1NFIChwcm92aWRlZCB0byB0aGUgcHVibGljIHN0cmljdGx5IGZvciBlZHVjYXRpb25hbCBhbmQgYWNhZGVtaWMgcmVzZWFyY2ggcHVycG9zZXMpLgoKVGhlIHNvdXJjZSBjb2RlIGZvciBnZW5lcmF0aW5nIHRoZSBncmFwaHMgaXMgYXZhaWxhYmxlIHVuZGVyIE1JVCBMaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL2NvdmlkXzE5X3dlc3Rlcm5fZXVyb3BlLlJtZC4KClRoZSBkYXRhIGFyZSBwcm92aWRlZCBhcyAqMjAxOSBOb3ZlbCBDb3JvbmF2aXJ1cyBDT1ZJRC0xOSAoMjAxOS1uQ29WKSBEYXRhIFJlcG9zaXRvcnkgYnkgSm9obnMgSG9wa2lucyBDU1NFKiAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9DU1NFR0lTYW5kRGF0YS9DT1ZJRC0xOSkuCgpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHBlLWRvY291cnQvQ09WSUQtMTkvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIGZvciBtb3JlIGRldGFpbHMuCgojIyBEYXRhIFNvdXJjZXMKCiogV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiAoV0hPKTogaHR0cHM6Ly93d3cud2hvLmludC8KKiBEWFkuY24uIFBuZXVtb25pYS4gMjAyMC4gaHR0cDovLzNnLmR4eS5jbi9uZXdoNS92aWV3L3BuZXVtb25pYS4KKiBCTk8gTmV3czogaHR0cHM6Ly9ibm9uZXdzLmNvbS9pbmRleC5waHAvMjAyMC8wMi90aGUtbGF0ZXN0LWNvcm9uYXZpcnVzLWNhc2VzLwoqIE5hdGlvbmFsIEhlYWx0aCBDb21taXNzaW9uIG9mIHRoZSBQZW9wbGXigJlzIFJlcHVibGljIG9mIENoaW5hIChOSEMpOgoqIGh0dHA6Ly93d3cubmhjLmdvdi5jbi94Y3MveXF0Yi9saXN0X2d6YmQuc2h0bWwKKiBDaGluYSBDREMgKENDREMpOiBodHRwOi8vd2Vla2x5LmNoaW5hY2RjLmNuL25ld3MvVHJhY2tpbmd0aGVFcGlkZW1pYy5odG0KKiBIb25nIEtvbmcgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmNocC5nb3YuaGsvZW4vZmVhdHVyZXMvMTAyNDY1Lmh0bWwKKiBNYWNhdSBHb3Zlcm5tZW50OiBodHRwczovL3d3dy5zc20uZ292Lm1vL3BvcnRhbC8KKiBUYWl3YW4gQ0RDOiBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vY2RjLmdvdi50dy8yMDE5bmNvdi90YWl3YW4/YXV0aHVzZXI9MAoqIFVTIENEQzogaHR0cHM6Ly93d3cuY2RjLmdvdi9jb3JvbmF2aXJ1cy8yMDE5LW5jb3YvaW5kZXguaHRtbAoqIEdvdmVybm1lbnQgb2YgQ2FuYWRhOiBodHRwczovL3d3dy5jYW5hZGEuY2EvZW4vcHVibGljLWhlYWx0aC9zZXJ2aWNlcy9kaXNlYXNlcy9jb3JvbmF2aXJ1cy5odG1sCiogQXVzdHJhbGlhIEdvdmVybm1lbnQgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmhlYWx0aC5nb3YuYXUvbmV3cy9jb3JvbmF2aXJ1cy11cGRhdGUtYXQtYS1nbGFuY2UKKiBFdXJvcGVhbiBDZW50cmUgZm9yIERpc2Vhc2UgUHJldmVudGlvbiBhbmQgQ29udHJvbCAoRUNEQyk6IGh0dHBzOi8vd3d3LmVjZGMuZXVyb3BhLmV1L2VuL2dlb2dyYXBoaWNhbC1kaXN0cmlidXRpb24tMjAxOS1uY292LWNhc2VzCiogTWluaXN0cnkgb2YgSGVhbHRoIFNpbmdhcG9yZSAoTU9IKTogaHR0cHM6Ly93d3cubW9oLmdvdi5zZy9jb3ZpZC0xOQoqIEl0YWx5IE1pbmlzdHJ5IG9mIEhlYWx0aDogaHR0cDovL3d3dy5zYWx1dGUuZ292Lml0L251b3ZvY29yb25hdmlydXMKCiMjIFRlcm1zIG9mIFVzZQoKKiBEYXRhIDogQ29weXJpZ2h0IDIwMjAgSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5LCBhbGwgcmlnaHRzIHJlc2VydmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5L2Jsb2IvbWFzdGVyL1JFQURNRS5tZC4KKiBTb3VyY2UgY29kZSBmb3IgZ2VuZXJhdGluZyBncmFwaHM6IENvcHlyaWdodCBQaGlsaXBwZSBEb2NvdXJ0LiBMaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL2NvdmlkXzE5X3dlc3Rlcm5fZXVyb3BlLlJtZC4KKiBHcmFwaGljcyA6IFB1YmxpYyBEb21haW4KCg==